Query Cache এবং Result Cache হল NHibernate এর দুটি কৌশল যা ডেটাবেস কোয়েরি ও ফলাফল ক্যাশে করার মাধ্যমে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে। এই ক্যাশিং পদ্ধতিগুলি কোয়েরি পুনরায় চালানোর প্রক্রিয়া কমাতে সাহায্য করে, যার ফলে ডেটাবেসের উপর লোড কমে এবং অ্যাপ্লিকেশন দ্রুততর হয়।
1. Query Cache
Query Cache হল একটি ক্যাশে যেটি কোয়েরি এর ফলাফল ক্যাশে করে রাখে, যাতে একই কোয়েরি আবার চলানোর সময় ডেটাবেস থেকে নতুন করে ফলাফল আনার প্রয়োজন না হয়। এটি কোয়েরি এক্সিকিউশন কমাতে সহায়তা করে, কারণ যদি একই কোয়েরি আগে চালানো হয়ে থাকে, তাহলে ক্যাশ থেকে ফলাফল সরাসরি পাওয়া যাবে।
Query Cache কনফিগার করা
Query Cache চালু করতে আপনাকে NHibernate কনফিগারেশন ফাইলে query_cache প্রপার্টি সেট করতে হবে এবং ক্যাশিং এনাবল করতে হবে।
hibernate.cfg.xml এ Query Cache কনফিগারেশন:
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
এখানে, hibernate.cache.use_query_cache প্রপার্টি true করার মাধ্যমে Query Cache সক্রিয় করা হচ্ছে।
Query Cache ব্যবহার
Query Cache ব্যবহার করতে হলে আপনাকে কোয়েরি কোডে cacheable প্যারামিটার ব্যবহার করতে হবে:
using (var session = NHibernateHelper.SessionFactory.OpenSession())
{
var query = session.CreateQuery("from Customer c where c.Name = :name");
query.SetParameter("name", "John Doe");
query.SetCacheable(true); // ক্যাশে ফলাফল রাখতে হবে
var customer = query.List<Customer>();
}
এখানে SetCacheable(true) ব্যবহার করা হয়েছে, যা কোয়েরি ফলাফলকে ক্যাশে রাখবে।
2. Result Cache
Result Cache হল এমন একটি ক্যাশে যা কোয়েরির ফলাফলকে সম্পূর্ণভাবে ক্যাশে করে রাখে। এটি বিশেষভাবে যখন একে অপরের পর পর একাধিক কোয়েরি চালানো হয় এবং সেই কোয়েরি গুলি একই ফলাফল প্রদান করে, তখন খুব কার্যকরী হয়। সাধারণত, এই ক্যাশিং মেথডটি কোয়েরি কোডের উপর ভিত্তি করে কাজ করে এবং একই রকম ফলাফল পুনরায় প্রাপ্তির প্রক্রিয়া দ্রুততর করে।
Result Cache কনফিগার করা
Result Cache কনফিগার করার জন্য, hibernate.cache.region.factory_class এবং hibernate.cache.use_second_level_cache প্রপার্টি ব্যবহার করতে হবে।
hibernate.cfg.xml এ Result Cache কনফিগারেশন:
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">NHibernate.Caches.SysCache.SysCacheRegionFactory, NHibernate.Caches.SysCache</property>
এটি 2nd level cache সক্রিয় করে, যা ক্যাশে ফলাফল রাখবে এবং পরবর্তী কোয়েরি এক্সিকিউশনকে দ্রুত করবে।
Result Cache ব্যবহার
যখন আপনি Result Cache ব্যবহার করতে চান, তখন কোয়েরি করার সময় cacheable প্যারামিটার ব্যবহার করবেন।
using (var session = NHibernateHelper.SessionFactory.OpenSession())
{
var query = session.CreateQuery("from Customer c where c.Name = :name");
query.SetParameter("name", "John Doe");
query.SetCacheable(true); // ফলাফল ক্যাশে হবে
var customer = query.List<Customer>();
}
এখানে, SetCacheable(true) ব্যবহার করে কোয়েরির ফলাফল ক্যাশে রাখা হচ্ছে। এতে একই কোয়েরি পুনরায় চালানোর সময় ক্যাশ থেকে ফলাফল ফিরে আসবে এবং ডেটাবেসে কোয়েরি চালানোর প্রয়োজন হবে না।
Query Cache এবং Result Cache এর মধ্যে পার্থক্য
- Query Cache: এটি শুধুমাত্র কোয়েরির ফলাফল ক্যাশে রাখে এবং পরবর্তীতে যদি একই কোয়েরি চলে, তাহলে সেই কোয়েরির ফলাফল ক্যাশ থেকে দেওয়া হয়। এটি কোয়েরি এক্সিকিউশনের সময়কে কমায়।
- Result Cache: এটি কোয়েরি ফলাফলস পুরোপুরি ক্যাশে রাখে এবং পরবর্তী সময়ে একই ফলাফল পুনরায় ব্যবহৃত হলে, ক্যাশ থেকে সেই ফলাফল সরবরাহ করা হয়। এটি পুরো কোয়েরির ফলাফল স্টোর করে, অর্থাৎ ফলাফলের সব তথ্য একসাথে ক্যাশে সংরক্ষিত থাকে।
Query এবং Result Cache এর ব্যবহারিক পরিস্থিতি
- Query Cache: এটি তখন উপকারী যখন একই কোয়েরি একাধিক বার চালানো হয় এবং ফলাফল পরিবর্তিত না হয়, যেমন অ্যাপ্লিকেশনের প্রথম লোডের সময় বা স্ট্যাটিক ডেটা (যেমন কনফিগারেশন বা মেটাডেটা) প্রদর্শন করতে।
- Result Cache: এটি তখন বেশি কার্যকরী যখন একটি কোয়েরি একাধিক বার চালানো হয় এবং তার ফলাফল প্রায় সব সময় একীভূত থাকে, যেমন ব্যবহারকারীর প্রোফাইল ডেটা বা একই ধরনের অর্ডারের তথ্য।
সারাংশ
Query Cache এবং Result Cache হল পারফরম্যান্স অপটিমাইজেশন কৌশল যা NHibernate এ ডেটাবেস কোয়েরি এবং ফলাফল ক্যাশে করে ডেটাবেসের লোড কমায় এবং অ্যাপ্লিকেশনকে দ্রুত করে তোলে। Query Cache সাধারণত কোয়েরির ফলাফল ক্যাশে রাখে, যখন Result Cache পুরো কোয়েরির ফলাফল ক্যাশে রাখে, ফলে ডেটাবেস এক্সিকিউশন কমে এবং পারফরম্যান্স উন্নত হয়।
Read more